Add and use plat_crash_console_flush() API
authorAntonio Nino Diaz <[email protected]>
Fri, 17 Feb 2017 17:11:27 +0000 (17:11 +0000)
committerAntonio Nino Diaz <[email protected]>
Fri, 31 Mar 2017 08:54:22 +0000 (09:54 +0100)
This API makes sure that all the characters sent to the crash console
are output before returning from it.

Porting guide updated.

Change-Id: I1785f970a40f6aacfbe592b6a911b1f249bb2735
Signed-off-by: Antonio Nino Diaz <[email protected]>
bl31/aarch64/crash_reporting.S
common/aarch32/debug.S
common/aarch64/debug.S
docs/porting-guide.md
include/plat/common/platform.h
plat/arm/common/aarch32/arm_helpers.S
plat/arm/common/aarch64/arm_helpers.S
plat/common/aarch32/platform_helpers.S
plat/common/aarch64/platform_helpers.S

index 8e603862fd7143a9ae69de292cbb8bb4f309b91a..c6d5c6c38f05c421a4960013c9a7daca39d20e7a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -349,6 +349,8 @@ func do_crash_reporting
        /* Print some platform registers */
        plat_crash_print_regs
 
+       bl      plat_crash_console_flush
+
        /* Done reporting */
        no_ret  plat_panic_handler
 endfunc do_crash_reporting
index ecf9faffa6f996a3d512ffcfd5144e0b453e2782..504da248ac24d1b98806526a4cc8f662db650e59 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -70,6 +70,9 @@ func do_panic
        /* Print new line */
        ldr     r4, =panic_end
        bl      asm_print_str
+
+       bl      plat_crash_console_flush
+
 1:
        mov     lr, r6
        b       plat_panic_handler
@@ -140,6 +143,9 @@ dec_print_loop:
        udiv    r5, r5, r6                      /* Reduce divisor */
        cmp     r5, #0
        bne     dec_print_loop
+
+       bl      plat_crash_console_flush
+
 1:
        no_ret  plat_panic_handler
 endfunc asm_assert
index 9dd53ca96774cec95122148be2ddc2a0ba524aed..10818421df815c4aabf061b38988d30709e16938 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -96,6 +96,7 @@ func asm_assert
        b.ne    _assert_loop
        mov     x4, x6
        asm_print_line_dec
+       bl      plat_crash_console_flush
 _assert_loop:
        b       _assert_loop
 endfunc asm_assert
@@ -187,6 +188,8 @@ el3_panic:
        sub     x4, x4, #4
        bl      asm_print_hex
 
+       bl      plat_crash_console_flush
+
 _panic_handler:
        /* Pass to plat_panic_handler the address from where el3_panic was
         * called, not the address of the call from el3_panic. */
index 65518ffb84f08e492d1a13bdeb583129f287a14c..034174cbda2721c07e7d6e6c757a647c01cb8212 100644 (file)
@@ -2228,6 +2228,17 @@ designated crash console. It must only use general purpose registers x1 and
 x2 to do its work. The parameter and the return value are in general purpose
 register x0.
 
+### Function : plat_crash_console_flush
+
+    Argument : void
+    Return   : int
+
+This API is used by the crash reporting mechanism to force write of all buffered
+data on the designated crash console. It should only use general purpose
+registers x0 and x1 to do its work. The return value is 0 on successful
+completion; otherwise the return value is -1.
+
+
 4.  Build flags
 ---------------
 
index 73bb6431fb8b2a8e98d1ac2616070ebb978a61bb..e8dfb997d8504ddab59553951339cec75a607b42 100644 (file)
@@ -90,6 +90,7 @@ uintptr_t plat_get_my_stack(void);
 void plat_report_exception(unsigned int exception_type);
 int plat_crash_console_init(void);
 int plat_crash_console_putc(int c);
+int plat_crash_console_flush(void);
 void plat_error_handler(int err) __dead2;
 void plat_panic_handler(void) __dead2;
 
index 5d238ecb5ec0640334c8ea7cb95fbaee12e4adcb..51e5ee9a0f8453e7e0d19e41861b0b07e2bbb72b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
 #include <platform_def.h>
 
        .weak   plat_arm_calc_core_pos
-       .weak   plat_crash_console_init
-       .weak   plat_crash_console_putc
        .weak   plat_my_core_pos
+       .globl  plat_crash_console_init
+       .globl  plat_crash_console_putc
+       .globl  plat_crash_console_flush
 
        /* -----------------------------------------------------
         *  unsigned int plat_my_core_pos(void)
@@ -85,3 +86,16 @@ func plat_crash_console_putc
        ldr     r1, =PLAT_ARM_CRASH_UART_BASE
        b       console_core_putc
 endfunc plat_crash_console_putc
+
+       /* ---------------------------------------------
+        * int plat_crash_console_flush()
+        * Function to force a write of all buffered
+        * data that hasn't been output.
+        * Out : return -1 on error else return 0.
+        * Clobber list : r0 - r1
+        * ---------------------------------------------
+        */
+func plat_crash_console_flush
+       ldr     r1, =PLAT_ARM_CRASH_UART_BASE
+       b       console_core_flush
+endfunc plat_crash_console_flush
index d782020ae06ef473149633cfa1dc2360f2187451..60ff834a1d007bb2bd65d8526a68d8c9504cda3c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -34,6 +34,7 @@
        .weak   plat_my_core_pos
        .globl  plat_crash_console_init
        .globl  plat_crash_console_putc
+       .globl  plat_crash_console_flush
        .globl  platform_mem_init
 
 
@@ -88,6 +89,19 @@ func plat_crash_console_putc
        b       console_core_putc
 endfunc plat_crash_console_putc
 
+       /* ---------------------------------------------
+        * int plat_crash_console_flush()
+        * Function to force a write of all buffered
+        * data that hasn't been output.
+        * Out : return -1 on error else return 0.
+        * Clobber list : r0 - r1
+        * ---------------------------------------------
+        */
+func plat_crash_console_flush
+       mov_imm x1, PLAT_ARM_CRASH_UART_BASE
+       b       console_core_flush
+endfunc plat_crash_console_flush
+
        /* ---------------------------------------------------------------------
         * We don't need to carry out any memory initialization on ARM
         * platforms. The Secure RAM is accessible straight away.
index 802e1fe6b865f56c4ec01275775c996226e52ef5..357719bfed4d86a4f3c4470e4c4ec5a1837e54bf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
 #include <arch.h>
 #include <asm_macros.S>
 
+       .weak   plat_crash_console_init
+       .weak   plat_crash_console_putc
+       .weak   plat_crash_console_flush
        .weak   plat_reset_handler
        .weak   plat_disable_acp
        .weak   platform_mem_init
        .weak   plat_panic_handler
 
+       /* -----------------------------------------------------
+        * Placeholder function which should be redefined by
+        * each platform.
+        * -----------------------------------------------------
+        */
+func plat_crash_console_init
+       mov     r0, #0
+       bx      lr
+endfunc plat_crash_console_init
+
+       /* -----------------------------------------------------
+        * Placeholder function which should be redefined by
+        * each platform.
+        * -----------------------------------------------------
+        */
+func plat_crash_console_putc
+       bx      lr
+endfunc plat_crash_console_putc
+
+       /* -----------------------------------------------------
+        * Placeholder function which should be redefined by
+        * each platform.
+        * -----------------------------------------------------
+        */
+func plat_crash_console_flush
+       mov     r0, #0
+       bx      lr
+endfunc plat_crash_console_flush
+
        /* -----------------------------------------------------
         * Placeholder function which should be redefined by
         * each platform.
index 68bda2233c8bc2557cb6eabfee41feffecfc93ea..ce4773845838fa29d0b47ad07fb4d22b47c6be64 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -35,6 +35,7 @@
        .weak   plat_report_exception
        .weak   plat_crash_console_init
        .weak   plat_crash_console_putc
+       .weak   plat_crash_console_flush
        .weak   plat_reset_handler
        .weak   plat_disable_acp
        .weak   bl1_plat_prepare_exit
@@ -96,6 +97,15 @@ func plat_crash_console_putc
        ret
 endfunc plat_crash_console_putc
 
+       /* -----------------------------------------------------
+        * Placeholder function which should be redefined by
+        * each platform.
+        * -----------------------------------------------------
+        */
+func plat_crash_console_flush
+       ret
+endfunc plat_crash_console_flush
+
        /* -----------------------------------------------------
         * Placeholder function which should be redefined by
         * each platform. This function should preserve x19 - x29.